package com.sg.dto.biz.app.common;

import com.sg.common.dto.BaseDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;
import java.util.Objects;

/**
 * @desc SubReportingTaskDto
 * @使用场景
 */
@Data
public class SubReportingTaskDto extends BaseDto implements Serializable {

    /**
     * 任务ID
     */
    @ApiModelProperty("任务ID")
    private String taskId;

    /**
     * 任务名称
     */
    @ApiModelProperty("任务名称")
    private String taskName;

    /**
     * 内容表主键ID
     */
    @ApiModelProperty("内容表主键ID")
    private String entityId;

    /**
     * 父内容表主键ID
     */
    @ApiModelProperty("父内容表主键ID")
    private String parentEntityId;

    /**
     * 主题内容ID
     */
    @ApiModelProperty("主题内容ID")
    private String themeContentId;

    /**
     * 任务状态 NOT_AT_THE:未开始 ONGOING:进行中 HAS_ENDED:已结束
     */
    @ApiModelProperty("任务状态")
    private String taskStatus;

    /**
     * 是否完成 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否完成")
    private String isComplete;

    /**
     * 完成情况 AHEAD_SCHEDULE:提前完成（提前24h） NORMAL_COMPLETE:正常完成 OVERDUE_COMPLETE:逾期完成
     */
    @ApiModelProperty("完成情况")
    private String completeStatus;

    /**
     * 是否逾期 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否逾期")
    private String isOverdue;

    /**
     * 是否自动汇报 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否自动汇报")
    private String isAutoReport;

    /**
     * 是否补报 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否补报")
    private String isReplenishReport;

    /**
     * 是否部门任务 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否部门任务")
    private String isDeptTask;

    /**
     * 是否异常任务 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否异常任务")
    private String isRegularTask;
    /**
     * 是否完成评价工作 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否完成评价工作")
    private String isDoneEvaluate;

    /**
     * 是否完成填报工作 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否完成填报工作")
    private String isDoneFilleout;
    /**
     * 内容表类型编码 OMS_TARGET_CYCLE:目标周期表 OMS_EVALUATION_OBJECT_TARGET_CYCLE:被评对象目标周期表 OMS_TARGET:目标表 OMS_TARGET_CATEGORY:目标分类表 OMS_TARGET_OBJECTIVE:指标表 OMS_TASK:任务表 OMS_ORG_INDUCTION_RECORD:就职记录表 OMS_FRAMEWORK_ORIGINAL_ROLE_MEMBER:身份人员表 OMS_ORG_DEPT:部门表 OMS_BASE_HOST:宿主表 OMS_FRAMEWORK_SPACE:空间表 OMS_TSPE_CYCLE_STAGE_DATA:周期阶段资料记录 OMS_EVALUATION_TEMPLATE:评价模板 OMS_EVALUATION_PORTRAIT:评价画像表 OMS_ORG_POSITION:职务表 OMS_VIRTUAL_ORG_MEMBER:虚拟组织成员表 OMS_PLANNING:规划资料表 OMS_FRAMEWORK_USERS:个人账号表 OMS_EXECUTE_CYCLE_STAGE:执行周期阶段表 OMS_CONF_SCHEME:配置方案表 OMS_EVA_OBJ_TARGET_CYCLE_OSET:被评对象目标周期目标设置表 OMS_EVA_OBJ_TARGET_CYCLE_WEIGHT_SET:被评对象目标周期权重设置表 OMS_NOTICE:通知公告表 OMS_CYCLE:周期表 OMS_EVALUATION_SUBJECT:评价主题表 OMS_BIZ_APP_BATCH:业务应用批次表 OMS_EVA_BATCH_RELATED_SET:评价模板批次相关设置表 OMS_TARGET_CYCLE_PLAN_SET:目标周期规划设置表 OMS_TARGET_OBJECTIVE_PLAN_EXTEND:指标扩展规划设置表 OMS_MESSAGE_CHANNEL:通道表
     */
    @ApiModelProperty("内容表类型编码")
    private String tableTypeCode;
    /**
     * 周期阶段资料记录ID
     */
    @ApiModelProperty("周期阶段资料记录ID")
    private String cycleStageDataId;

    /**
     * 关联目标内容ID
     */
    @ApiModelProperty("关联目标内容ID")
    private String targetCycleContentId;

    /**
     * 内容性质类型编码 STA_WOR_SUM_CON:阶段工作总结内容 SUM_OF_PRO:问题总结 SOLVING_IDEAS:解决思路 RE_FOR_IMP:改进建议
     */
    @ApiModelProperty("内容性质类型编码")
    private String stageContentType;

    /**
     * 阶段资料具体内容
     */
    @ApiModelProperty("阶段资料具体内容")
    private String stageData;

    /**
     * 超文本内容
     */
    @ApiModelProperty("阶段工作总结内容")
    private String hypertextContent;

    /**
     * 实际结束时间
     */
    @ApiModelProperty("任务汇报时间")
    private Date actualEndTime;

    /**
     * 被评对象目标周期ID
     */
    @ApiModelProperty("被评对象目标周期ID")
    private String evaObjTargetCycleId;

    /**
     * 目标周期周期名称
     */
    @ApiModelProperty("目标周期周期名称")
    private String targetCycleStandardName;

    /**
     * 展示目标值
     */
    @ApiModelProperty("目标周期展示目标值")
    private Double showTargetValue;

    /**
     * 冗余单位
     */
    @ApiModelProperty("目标值单位")
    private String unit;

    /**
     * 周期ID
     */
    @ApiModelProperty("周期ID")
    private String cycleId;

    /**
     * 执行周期周期名称
     */
    @ApiModelProperty("执行周期周期名称")
    private String executeCycleStandardName;

    /**
     * 虚拟组织成员就职记录ID
     */
    @ApiModelProperty("负责人就职记录ID")
    private String virtualOrgInductionRecordId;

    /**
     * 组内职务名称
     */
    @ApiModelProperty("负责人职务")
    private String virtualOrganizationPosition;
    /**
     * 实际值（数值）
     */
    @ApiModelProperty("实际值（数值）")
    private Double actualValue;

    /**
     * 实际值单位 TIMES:次 DOOR:门 PART:部 SET:套 INDIVIDUAL:个 YUAN:元 NNT:人 PIECE:篇 TERM:项 FEN:分 WAN_YUAN:万元 PERCENT:百分率 PORTION:份
     */
    @ApiModelProperty("实际值单位")
    private String actualValueUnit;

    /**
     * 较上次目标变化值
     */
    @ApiModelProperty("较上次目标变化值")
    private Double changeFromLastTarget;

    /**
     * 较上次目标变化值单位 TIMES:次 DOOR:门 PART:部 SET:套 INDIVIDUAL:个 YUAN:元 NNT:人 PIECE:篇 TERM:项 FEN:分 WAN_YUAN:万元 PERCENT:百分率 PORTION:份
     */
    @ApiModelProperty("较上次目标变化值单位")
    private String changeFromLastTargetUnit;

    /**
     * 较上次目标增降幅
     */
    @ApiModelProperty("较上次目标增降幅")
    private Double fromLastTargetLiftRatio;

    /**
     * 较上次目标增降幅单位 TIMES:次 DOOR:门 PART:部 SET:套 INDIVIDUAL:个 YUAN:元 NNT:人 PIECE:篇 TERM:项 FEN:分 WAN_YUAN:万元 PERCENT:百分率 PORTION:份
     */
    @ApiModelProperty("较上次目标增降幅单位")
    private String fromLastTargetLiftRatioUnit;

    /**
     * 进度值（数值）
     */
    @ApiModelProperty("进度值（数值）")
    private Double progressValue;

    /**
     * 进度值单位
     */
    @ApiModelProperty("进度值单位")
    private String progressValueUnit;

    /**
     * 进度较上次变化值
     */
    @ApiModelProperty("进度较上次变化值")
    private Double fromLastProgressValue;

    /**
     * 进度较上次变化值单位 TIMES:次 DOOR:门 PART:部 SET:套 INDIVIDUAL:个 YUAN:元 NNT:人 PIECE:篇 TERM:项 FEN:分 WAN_YUAN:万元 PERCENT:百分率 PORTION:份
     */
    @ApiModelProperty("进度较上次变化值单位")
    private String fromLastProgressValueUnit;

    /**
     * 进度较上次增降幅
     */
    @ApiModelProperty("进度较上次增降幅")
    private Double progressFromLastRatio;

    /**
     * 进度较上次增降幅单位 TIMES:次 DOOR:门 PART:部 SET:套 INDIVIDUAL:个 YUAN:元 NNT:人 PIECE:篇 TERM:项 FEN:分 WAN_YUAN:万元 PERCENT:百分率 PORTION:份
     */
    @ApiModelProperty("进度较上次增降幅单位")
    private String progressFromLastRatioUnit;

    /**
     * 达成度（数值）
     */
    @ApiModelProperty("达成度（数值）")
    private Double reach;

    /**
     * 达成度单位
     */
    @ApiModelProperty("达成度单位")
    private String reachUnit;

    /**
     * 达成度较上次变化值
     */
    @ApiModelProperty("达成度较上次变化值")
    private Double fromLastReach;

    /**
     * 达成度较上次变化值单位 TIMES:次 DOOR:门 PART:部 SET:套 INDIVIDUAL:个 YUAN:元 NNT:人 PIECE:篇 TERM:项 FEN:分 WAN_YUAN:万元 PERCENT:百分率 PORTION:份
     */
    @ApiModelProperty("达成度较上次变化值单位")
    private String fromLastReachUnit;

    /**
     * 达成度较上次增降幅
     */
    @ApiModelProperty("达成度较上次增降幅")
    private Double actualFromLastTimeRatio;

    /**
     * 达成度较上次增降福单位 TIMES:次 DOOR:门 PART:部 SET:套 INDIVIDUAL:个 YUAN:元 NNT:人 PIECE:篇 TERM:项 FEN:分 WAN_YUAN:万元 PERCENT:百分率 PORTION:份
     */
    @ApiModelProperty("达成度较上次增降福单位")
    private String actualFromLastTimeRatioUnit;

    /**
     * 汇报得分（数值）
     */
    @ApiModelProperty("汇报得分（数值）")
    private Double reportScoreValue;

    /**
     * 汇报得分单位 TIMES:次 DOOR:门 PART:部 SET:套 INDIVIDUAL:个 YUAN:元 NNT:人 PIECE:篇 TERM:项 FEN:分 WAN_YUAN:万元 PERCENT:百分率 PORTION:份
     */
    @ApiModelProperty("汇报得分单位")
    private String reportScoreUnit;

    /**
     * 实际得分（数值）
     */
    @ApiModelProperty("实际得分（数值）")
    private Double actualScoreValue;

    /**
     * 实际得分单位 TIMES:次 DOOR:门 PART:部 SET:套 INDIVIDUAL:个 YUAN:元 NNT:人 PIECE:篇 TERM:项 FEN:分 WAN_YUAN:万元 PERCENT:百分率 PORTION:份
     */
    @ApiModelProperty("实际得分单位")
    private String actualScoreUnit;
    /**
     * 计划结束时间
     */
    @ApiModelProperty("计划结束时间")
    private Date planEndTime;

    /**
     * 前端偏差时间
     */
    @ApiModelProperty("前端偏差时间")
    private Long deflectionTime;

    /**
     * 前端偏差语义提示
     */
    @ApiModelProperty("前端偏差语义提示")
    private String deflectionInfo;

    /**
     * 主体生命周期 CURRENTLY_VALID:当前有效 EDITING:正在编辑 ARCHIVING:历史存档
     */
    @ApiModelProperty("汇报任务的主体生命周期")
    private String subjectLifeCycle;
    /**
     * 关联目标内容类型编码 TARGET:目标 TARGET_CATEGORY:目标分类 OBJECTIVE:指标 INDUCTION_ID:就职记录
     */
    @ApiModelProperty("关联目标内容类型编码")
    private String targetCycleContentTypeCode;
    /**
     * 内容冗余状态 EDITING:草稿 TOBESIGN:待签收 ONGOING:进行中 FAILED:已失败 OVERDUE:逾期任务 NOT_AT_THE:未开始 UNCOMPLETED:未完成 COMPLETED:已完成 UNREPORTED:待汇报 EVA:评价中 AUDIT:审核中 EXPIRED:已逾期 SUCCESS:已成功 ENDED:已结束 UNLIMITED:不限
     */
    @ApiModelProperty("内容冗余状态")
    private String stateCode;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        if (!super.equals(o)) return false;
        SubReportingTaskDto that = (SubReportingTaskDto) o;
        return taskId == that.taskId && taskName == that.taskName && entityId == that.entityId && parentEntityId == that.parentEntityId && themeContentId == that.themeContentId && taskStatus == that.taskStatus && isComplete == that.isComplete && completeStatus == that.completeStatus && isOverdue == that.isOverdue && isAutoReport == that.isAutoReport && isReplenishReport == that.isReplenishReport && isDeptTask == that.isDeptTask && isRegularTask == that.isRegularTask && isDoneEvaluate == that.isDoneEvaluate && isDoneFilleout == that.isDoneFilleout && tableTypeCode == that.tableTypeCode && cycleStageDataId == that.cycleStageDataId && targetCycleContentId == that.targetCycleContentId && stageContentType == that.stageContentType && stageData == that.stageData && hypertextContent == that.hypertextContent && actualEndTime == that.actualEndTime && evaObjTargetCycleId == that.evaObjTargetCycleId && targetCycleStandardName == that.targetCycleStandardName && showTargetValue == that.showTargetValue && unit == that.unit && cycleId == that.cycleId && executeCycleStandardName == that.executeCycleStandardName && virtualOrgInductionRecordId == that.virtualOrgInductionRecordId && virtualOrganizationPosition == that.virtualOrganizationPosition && actualValue == that.actualValue && actualValueUnit == that.actualValueUnit && changeFromLastTarget == that.changeFromLastTarget && changeFromLastTargetUnit == that.changeFromLastTargetUnit && fromLastTargetLiftRatio == that.fromLastTargetLiftRatio && fromLastTargetLiftRatioUnit == that.fromLastTargetLiftRatioUnit && progressValue == that.progressValue && progressValueUnit == that.progressValueUnit && fromLastProgressValue == that.fromLastProgressValue && fromLastProgressValueUnit == that.fromLastProgressValueUnit && progressFromLastRatio == that.progressFromLastRatio && progressFromLastRatioUnit == that.progressFromLastRatioUnit && reach == that.reach && reachUnit == that.reachUnit && fromLastReach == that.fromLastReach && fromLastReachUnit == that.fromLastReachUnit && actualFromLastTimeRatio == that.actualFromLastTimeRatio && actualFromLastTimeRatioUnit == that.actualFromLastTimeRatioUnit && reportScoreValue == that.reportScoreValue && reportScoreUnit == that.reportScoreUnit && actualScoreValue == that.actualScoreValue && actualScoreUnit == that.actualScoreUnit && planEndTime == that.planEndTime && deflectionTime == that.deflectionTime && deflectionInfo == that.deflectionInfo && subjectLifeCycle == that.subjectLifeCycle && targetCycleContentTypeCode == that.targetCycleContentTypeCode && stateCode == that.stateCode;
    }

    @Override
    public int hashCode() {
        return Objects.hash(super.hashCode(), taskId, taskName, entityId, parentEntityId, themeContentId, taskStatus, isComplete, completeStatus, isOverdue, isAutoReport, isReplenishReport, isDeptTask, isRegularTask, isDoneEvaluate, isDoneFilleout, tableTypeCode, cycleStageDataId, targetCycleContentId, stageContentType, stageData, hypertextContent, actualEndTime, evaObjTargetCycleId, targetCycleStandardName, showTargetValue, unit, cycleId, executeCycleStandardName, virtualOrgInductionRecordId, virtualOrganizationPosition, actualValue, actualValueUnit, changeFromLastTarget, changeFromLastTargetUnit, fromLastTargetLiftRatio, fromLastTargetLiftRatioUnit, progressValue, progressValueUnit, fromLastProgressValue, fromLastProgressValueUnit, progressFromLastRatio, progressFromLastRatioUnit, reach, reachUnit, fromLastReach, fromLastReachUnit, actualFromLastTimeRatio, actualFromLastTimeRatioUnit, reportScoreValue, reportScoreUnit, actualScoreValue, actualScoreUnit, planEndTime, deflectionTime, deflectionInfo, subjectLifeCycle, targetCycleContentTypeCode, stateCode);
    }

}
